package org.ch02.test04;

import org.ch02.entity.Student;

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.Parameter;

/**
 * 反射常用 API - Method
 * @author ZJL
 * @date 2025-03-18
 */
public class MainTest02 {
    public static void main(String[] args) throws Exception {
        // 第一：获取操作类的 Class对象
        Class<Student> clazz = Student.class;
        // 第二：基于 Class 对象，实现相关的操作 - 运行时、动态性
        // Class 对象可以获取类的所有信息（对象）

        //实例化对象
        Student student = clazz.newInstance();

        // 获取类中指定名称的方法对象 - 必须指定方法参数类型的 Class 对象
        // sleep(String address,int hour)
        Method sleepMethod = clazz.getDeclaredMethod("sleep", String.class, int.class);

        // 开放访问权限
        sleepMethod.setAccessible(true);
        // 调用方法 - String msg = stu.sleep("D-203",1)
        // invoke(对象,Object... 实参数据)
        Object msg = sleepMethod.invoke(student, "D-230", 1);
        // 注意：在这里，按需要进行 向下转型 - 把父类对象转换为子类对象
//        if (msg instanceof String) {
//            String s = (String) msg;
//            System.out.println(s);
//        }
        System.out.println(msg.toString());
    }
}
